/* 引入路由 */
import router from './router'

/* 引入数据存储 */
import store from './store'

/* 进度条 */
import NProgress from 'nprogress'

/* 进度条样式 */
import 'nprogress/nprogress.css'

/* 获取授权  */
import { setUserId, redirctLogin, getToken } from '@/utils/auth'
// import { setUserId, redirctLogin, getUserId } from '@/utils/auth'

// import { errorMessage } from '@/utils/message'

// 白名单，白名单上的不检查权限
const whiteList = ['/home']
/**
 * 递归检查是否具有菜单权限
 * @param {*} menus 菜单列表
 * @param {*} to  目标对象
 * @returns {Boolean} 是否具有目标对象的权限
 */
function hasMenuPermission (menus, to) {
  return menus.some(menu => {
    if (menu.component === to.name || menu.path === to.path) {
      return true
    }
    if (menu.children && menu.children.length > 0) {
      if (hasMenuPermission(menu.children, to)) {
        return true
      }
    }
    return false
  })
}

/**
 * 判断路由是否具有相应的权限
 * @param {*} to 目标对象
 * @returns {Boolean} 是否具有目标对象权限
 */
function hasPermission (to) {
  if (!to.meta.requiresAuth || whiteList.indexOf(to.path) !== -1) {
    return true
  }
  let menus = store.getters.navMenus
  return hasMenuPermission(menus, to)
}

router.beforeEach((to, from, next) => {
  // 检查地址中是否有token
  let urlParas = to.query
  if (urlParas['userId']) {
    setUserId(urlParas['userId'])
    // 设置token到store
    // store.commit('setUserId', urlParas['token'])
    // next({path: to.path})
    return
  }
  // 开启Progress
  NProgress.start()
  // 1 判断是否有token getAccessToken
  store.dispatch('SETTHEME')
  if (getToken()) {
  //   // 2、已登录，且请求登录界面，则直接跳转到后台主界面
  //   if (to.path === '/login') {
  //     next({path: '/'})
  //   } else {
      // if (to.matched.length === 0) { // 如果未匹配到路由
      //   next('/404')
      // } else {
      //   next() // 如果匹配到正确跳转
      // }
  //     // 判断当前用户是否已拉取完初始化信息
      if (store.getters.navMenus.length === 0) {
        // 获取当前登录用户信息
        store.dispatch('getUserInfo')
        // 加载菜单
        store.dispatch('GetNavMenus', {})
        // store.dispatch('GetNavMenus', {'userId': getUserId()})
        // 加载字典
        store.dispatch('GetDictionarys')
        next()
  //       let routerPathsMapping = {}
  //       router.options.routes.forEach(it => {
  //         buildRouterMapping(routerPathsMapping, it)
  //       })
  //       // 加载初始化数据
  //       store.dispatch('GetSysMenus').then(res => {
  //         next(...to)
  //       }).catch(() => {
  //         // 获取初始化数据失败，则触发注销处理，并重新跳转到登录界面
  //         store.dispatch('FedLogout').then(() => {
  //           // next({path: '/login'})
  //           redirctLogin()
  //         })
  //       })
      } else {
        next()
  //       // 4
        if (hasPermission(to)) {
  //         storage.setSession(SESSION_CURRENT_ROUTE, {
  //           name: to.name,
  //           title: to.meta.title,
  //           path: to.path,
  //           query: to.query,
  //           params: to.params
  //         })
        }
        // else {
          // errorMessage('无权限,请联系管理员！！！')
          // next({name: from.name})
          // next({path: '/401', query: {noGoBack: false, oringinUrl: from.name}})
        // }
        // if (!store.state.sys.dictionarys) {
        //   store.dispatch('GetDictionarys')
        // }
      }
    // }
  } else {
  //   // 在免登录白名单，直接进入
  //   if (whiteList.indexOf(to.path) !== -1) {
  //     next()
  //   } else {
  //     // // 否则全部重定向到登录页
  //     // next({path: '/login', query: {noGoBack: false}})
  //     // // 在hash模式下 改变手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps：history模式下无问题，可删除该行！
  //     // 重定向到统一登录门户
  //     // window.open(httpConfig.LOGIN_SITE + '?redirct=' + window.location.href, '_self')
    if (to.path !== '/login') {
      next({path: '/login'})
    }
    console.log('notoken')
    next()
    redirctLogin()
        // NProgress.done()
  //   }
  }
})

router.afterEach(() => {
  NProgress.done() // 跳转结束后，关闭进度
})
